package com.itheima.manager.dao;

import com.itheima.manager.domain.DitieZhan;

import java.io.*;
import java.util.ArrayList;

public class DiTieDao {
    //定义一个集合用来存储文件中的地铁信息;
    private static ArrayList<DitieZhan> list = new ArrayList<DitieZhan>();

    //静态代码块用来: 初始化数据(地铁站信息)
    static {
        //加载文件中的地铁站信息
        load01();


    }

    //功能:用来加载文件中存储的地铁站信息
    private static void load01() {
        try {
            //1.创建一个缓存字符输入流,用来读取文件的内容
            BufferedReader br = new BufferedReader(new FileReader("地铁系统案例一\\subways.txt"));
            //2.创建临时变量
            String line;
            //3.循环读取流中数据,直到line=null
            while ((line = br.readLine()) != null) {
                //分割读取到的每一个字符串,得到DiTieZhan对象
                if (!line.contains(",")) {
                    break;
                }
                String[] sdt = line.split(",");
                list.add(new DitieZhan(sdt[0], sdt[1], sdt[2]));
            }
            //4.关闭字符输入流
            br.close();
        } catch (IOException e) {
            System.out.println("加载文件中的地铁信息发生异常...");
        }
    }


    //功能:将集合中的对象以指定个存储到文件中
    public static void reSave01() {
        try {
            //1.创建一个缓存字符输出流,用来存储集合数据到文件中
            BufferedWriter bw = new BufferedWriter(new FileWriter("地铁系统案例一\\subways.txt"));
            //2.将集合中每一个对象存储到文件中
            for (DitieZhan ditieZhan : list) {
                //存储一个对象的字符串格式
                bw.write(ditieZhan.toString());
                //每存储一个对象,换一行
                bw.newLine();
            }
            //3.关闭流
            bw.close();
        } catch (Exception e) {
            System.out.println("将集合中的数据保存到文件中,出现异常现象....");
        }


    }


    //持久层:返回集合中的数据,进行查找操作
    public ArrayList<DitieZhan> selectFindAllDt() {
        //返回集合
        return list;
    }

    //持久层添加地铁站信息
    public void addDiTieZhan(DitieZhan ditie) {
        //list执行添加功能
        list.add(ditie);
        //保存集合中数据到文件中去
        reSave01();
    }

    //持久层的删除功能
    public void deleteDiTieZhan(String id) {
        //1.根据地铁编号获取在集合中的索引
        int index = byIdGetIndex(id);
        //2.根据索引删除
        list.remove(index);
        //保存集合的数据到文件中去
        reSave01();
    }

    //通过地铁编号找到集合中对应的索引值
    private int byIdGetIndex(String id) {
        //使用标记位思想,默认索引为-1
        int index = -1;
        //从集合查找指定地铁编号的索引
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) != null && id.equals(list.get(i).getId())) {
                //找到对应地铁编号的索引
                index = i;
            }
        }
        //返回查找的索引
        return index;
    }

    //持久层的修改功能
    public boolean updateDiTieZhan(String id, DitieZhan dt) {
        //使用标记位思想,默认修改失败
        boolean flag = false;
        //1.根据地铁编号获取在集合中的索引
        int index = byIdGetIndex(id);
        //修改集合中的地铁站信息
        DitieZhan result = list.set(index, dt);
        //判断修改的结果是否为空
        if (result != null) {
            flag = true;
        }
        //保存修改的集合数据到文件中去
        reSave01();
        //返回修改结果
        return flag;
    }
}
